/**
 * 
 */
package cn.nawang.ebeim.api.utils;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

import cn.nawang.ebeim.api.bean.ClassBean;
import cn.nawang.ebeim.api.domain.User;

/**
 * @ClassName: RefectSql
 * @Description: 反射出条件查询的SQL工具类
 * @author 张建峰
 * @date 2015年8月7日 上午9:05:33
 * @version v1.0
 */
public class RefectSql {
  
  public static void main(String[] args) throws Exception {
    User user = new User();
    user.setName("xxxxx");
    List<ClassBean> list =  getClassBeans(user);
    for(ClassBean b:list){
      System.out.println(b.getType()+"\t"+b.getName()+"\t"+b.getContent());
    }
  }

  public static List<ClassBean> getClassBeans(Object object){
    List<ClassBean> list = new ArrayList<ClassBean>();
    if (object != null) {// if (object!=null ) ----begin
      // 拿到该类
      Class<?> clz = object.getClass();
      // 获取实体类的所有属性，返回Field数组
      Field[] fields = clz.getDeclaredFields();
      for (Field field : fields) {// --for() begin
        String type = field.getType().getName();
        String name = field.getName();
        Method method;
        try {
          method = (Method) object.getClass().getMethod("get" + getMethodName(field.getName()));
          Object value = method.invoke(object);// 调用getter方法获取属性值
          ClassBean bean = new ClassBean();
          bean.setType(type);
          bean.setName(name);
          bean.setContent(value);
          list.add(bean);
        } catch (Exception e) {
          e.printStackTrace();
        }
      } 
    }
    return list;
  }

  // 把一个字符串的第一个字母大写、效率是最高的、
  private static String getMethodName(String fildeName) throws Exception {
    byte[] items = fildeName.getBytes();
    items[0] = (byte) ((char) items[0] - 'a' + 'A');
    return new String(items);
  }
}
